#ifndef FHE_CORE_NODEINTERFACEREGISTERER_H
#define FHE_CORE_NODEINTERFACEREGISTERER_H

#include <fhe/core/NodeFactory.h>

namespace fhe
{
  namespace core
  {
    class FHE_API NodeInterfaceRegisterer
    {
    public:
      NodeInterfaceRegisterer( const std::string& module, const std::string& name );
      NodeInterfaceRegisterer( const std::string& nodeModule, const std::string& nodeName, const std::string& interfaceModule, const std::string& interfaceName );
    };
    
    #define FHE_INTERFACE( module, name ) ::fhe::core::NodeInterfaceRegisterer fhe_interface_registerer_##module##_##name( #module, #name );
    
    #define FHE_NODE_INTERFACE( nodeModule, nodeName, interfaceModule, interfaceName ) ::fhe::core::NodeInterfaceRegisterer fhe_node_interface_registerer_##nodeModule##_##nodeName##_##interfaceModule##_interfaceName( #nodeModule, #nodeName, #interfaceModule, #interfaceName );
  }
}

#endif
